服务器-客户端通信java
我有这个客户端,服务器信息并不重要。这段代码的输出非常随机
class Client {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("127.0.0.1", 10004);//this will become the addr of the server you want to input.
InetAddress host = clientSocket.getInetAddress();
// System.out.println(host);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
boolean exit = false;
while (!exit) {
while (inFromServer.ready()) {
System.out.println(inFromServer.readLine());
}
String sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + "\n");
}
clientSocket.close();
}
}
如果我在调试模式下运行它,它总是有正确的结果。例如
- 请输入密码
- 用户类型通过
- 正确通过
- 请输入命令
- 然后你输入命令
- 等等
- 等等
当它不处于调试模式时,一切都会出错。我甚至没有收到服务器的初始请求。怎么回事?我觉得读取行可能执行得太快了
# 1 楼答案
in.ready()
不等待任何数据可用。如果服务器还没有发送数据,当客户端读取该行时,您将完全跳过readLine()
只需删除
while
并执行一个简单的readLine()
如果在某些阶段需要等待来自服务器的多条线路,则需要实现更多逻辑。通常,服务器会发送一个“消息结束”标记,以向客户端表明消息已完成。例如,当服务器完成时,它可以发送消息“消息结束”。在客户端代码中,您将执行以下操作: